#include "widget.h"
#include <QPushButton>

// 需求: 创建两个类  Teacher类  Student类
// 下课后 老师Teacher zt  会发出一个信号  饿了
// 学生响应信号 Student st  处理信号的槽函数  请客吃饭

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    // 把老师对象扔到Children表里面  就不用管它释放了
    zt = new Teacher(this);
    st = new Student(this);
    // 连接老师和学生
    // 无参
    // connect(zt, &Teacher::hungry, st, &Student::treat);


    // 因为有重载的出现  有 有参 和 无参两种形式  那么就需要使用 函数指针
    // 有参的信号和槽的连接
    // 函数指针   指向函数地址
    void(Teacher:: *teacherSignal)(QString) = &Teacher::hungry;
    void(Student:: *stSlot)(QString) = &Student::treat;
    connect(zt, teacherSignal, st, stSlot);

    // 下课
    // classIsOver();

    QPushButton *btn = new QPushButton("下课", this);
    // 触发无参 信号  和 槽
    // 信号连接信号
    void(Teacher:: *noTeacherSignal)(void) = &Teacher::hungry;
    void(Student:: *noStuSlot)(void) = &Student::treat;

    connect(btn, &QPushButton::clicked, zt, noTeacherSignal);

    connect(zt, noTeacherSignal, st, noStuSlot);

    // 断开信号和槽
    disconnect(zt, noTeacherSignal, st, noStuSlot);

    // 重置大小
    resize(600, 400);
}

void Widget::classIsOver()
{
    // 触发老师饿了的信号

    // 自定义信号的触发的关键字  emit
    //    emit zt->hungry(); // 触发的是无参的信号
    emit zt->hungry("宫保鸡丁");

}

Widget::~Widget()
{

}
